package edu.asselvi.seguros.dao;

import java.sql.Connection; 
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import edu.asselvi.seguros.db.DbUtils;
import edu.asselvi.seguros.exception.ESegurosErros;
import edu.asselvi.seguros.exception.SegurosException;
import edu.asselvi.seguros.pojo.Estado;



public class EstadoDao extends DbUtils{

	Connection conn;

	public EstadoDao(Connection conn) {
		this.conn = conn; 
	}
		
	
	public Estado insert(Estado estado) throws SegurosException{

		String sql = "INSERT INTO ESTADOS (ID_ESTADO, NOME, ABREVIACAO) VALUES (?, ?, ?)";
		PreparedStatement p = null;

		try {
			estado.setId_estado(getNextId("SEQ_ESTADOS", conn)); 
			
			p = conn.prepareStatement(sql);
			int cont = 1;
			p.setInt(cont++, estado.getId_estado());
			p.setString(cont++, estado.getNome());
			p.setString(cont++, estado.getAbreviacao());

			p.executeUpdate();

		} catch (SQLException e) {
			throw new SegurosException(ESegurosErros.ERRO_INSERCAO);
			
		} finally {
			close(p);
		}
		return estado;
	}
	
	
	
	public List<Estado> list() throws SQLException, SegurosException {

		String sql = "SELECT * FROM ESTADOS";

		List<Estado> lista = null;
		PreparedStatement p = null;
		java.sql.ResultSet rs = null;

		try {
			lista = new ArrayList<Estado>();
			p = conn.prepareStatement(sql);
			rs = p.executeQuery();

			while (rs.next()) {
				Estado estado = new Estado();
				estado.setId_estado(rs.getInt("ID_ESTADO"));
				estado.setNome(rs.getString("NOME"));
				estado.setAbreviacao(rs.getString("ABREVIACAO"));

				lista.add(estado);
			}
			if (lista.isEmpty()){
				throw new SegurosException(ESegurosErros.ERRO_ZERO_REGISTROS);
			} 

		} finally {
			close(rs);
			close(p);
		}

		return lista;		
	}


	public Estado getEstado(int id_estado) throws SegurosException {

		String sql = "SELECT * FROM ESTADOS WHERE ID_ESTADO = ?";

		Estado estado = new Estado();
		PreparedStatement p = null;
		ResultSet rs = null;
		
		try {
			p = conn.prepareStatement(sql);
			p.setInt(1, id_estado);
			rs = p.executeQuery();

			while (rs.next()) {

				estado.setId_estado(rs.getInt("ID_ESTADO"));
				estado.setNome(rs.getString("NOME"));
				estado.setAbreviacao(rs.getString("ABREVIACAO"));
				
			}
		} catch (SQLException e) {
			throw new SegurosException(ESegurosErros.ERRO_RECUPERAR_DADOS);
			
		} finally {
			close(p);
			close(rs);
		}
		return estado;		

	
	}

	
	
	
	
	
}
